// import store from "@/stores/index";
// import { AppTreeNode, Dictionary } from "@/interface";
import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'
export const inputTextLength = 30
export const textareaTextLength = 200
export const backstageName = '后台管理'
export class ButtonTagName {
  static add = 'add'
  static edit = 'edit'
  static query = 'query'
  static delete = 'delete'
  static mulDelete = 'mul-delete'
  static auth = 'authorize'
  static check = 'check'
}
export function inputNum(target: string) {
  return (target + '')
    .replace(/[^\d.]/g, '')
    .replace(/\.{2,}/g, '.')
    .replace('.', '$#$')
    .replace(/\./g, '')
    .replace('$#$', '.')
    .replace(/^\./g, '')
}
/**只能输入数字且有小数点最多保留两位*/
export function checkPrice(value: any) {
  let checkPlan = '' + value
  checkPlan = checkPlan
    .replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
    .replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
    .replace(/^\./g, '') // 保证第一个为数字而不是.
    .replace('.', '$#$')
    .replace(/\./g, '')
    .replace('$#$', '.')
  if (checkPlan.indexOf('.') < 0 && checkPlan !== '') {
    // 以上已经过滤，此处控制的是如果没有小数点，首位不能为类似于 01、02的金额
    checkPlan = parseFloat(checkPlan) + ''
  } else if (checkPlan.indexOf('.') >= 0) {
    checkPlan = checkPlan.replace(/^()*(\d+)\.(\d\d).*$/, '$1$2.$3') // 只能输入两个小数
  }
  return checkPlan
}

// ip验证
export function checkIp(e: any) {
  e = e + ''
  const pattern = /[^0-9.]/g // 匹配非数字和点号的字符
  e = e.replace(pattern, '').replace(/\.{2,}/g, '.') // 替换非数字和点号的字符为空字符串
  return e
}

/**只能输入数字整型*/
export function checkNumber(value: any) {
  const checkPlan = '' + value
  return checkPlan.replace(/[^0-9]/g, '')
}
//根据Id 和 文件名导出excel
export function exportExcelDown(id: any, filename: any) {
  //不加判断table表格导出会有两份数据，是因为fixed造成的，所以要筛选去重
  // 判断要导出的节点中是否有fixed的表格，如果有，转换excel时先将该dom移除，然后append回去
  const xlsxParam = { raw: true } // 导出的内容只做解析，不进行格式转换，这样就可以解决时间格式乱码的问题
  const fix = document.querySelector('.el-table__fixed')
  let exportTable
  if (fix) {
    exportTable = XLSX.utils.table_to_book(
      document.querySelector(id).removeChild(fix),
      xlsxParam,
    )
    document.querySelector(id).appendChild(fix)
  } else {
    exportTable = XLSX.utils.table_to_book(
      document.querySelector(id),
      xlsxParam,
    )
  }
  const exportTableOut = XLSX.write(exportTable, {
    bookType: 'xlsx',
    bookSST: true,
    type: 'array',
  })
  try {
    FileSaver.saveAs(
      new Blob([exportTableOut], {
        type: 'application/octet-stream',
      }),
      filename + '.xlsx',
    )
  } catch (e) {
    if (typeof console !== 'undefined') {
      console.log(e, exportTableOut)
    }
  }
  return exportTableOut
}
//深克隆对象或数组
export function deepClone(obj: any) {
  const objClone: any = Array.isArray(obj) ? [] : {}
  if (obj && typeof obj === 'object') {
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (obj[key] && typeof obj[key] === 'object') {
          objClone[key] = deepClone(obj[key])
        } else {
          objClone[key] = obj[key]
        }
      }
    }
  }
  return objClone
}

// 导出文件
export const downloadFile = (data: any, filename?: any) => {
  if (!data) {
    return
  }
  // '具体的URL'可以是接口请求得到的response数据流；
  //   let blob = new Blob(["具体的URL"], {
  //     type: "application/json;charset=utf-8",
  //   });
  const url = window.URL.createObjectURL(data)
  const link = document.createElement('a')
  link.style.display = 'none'
  link.href = url
  link.setAttribute('download', filename)

  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link) // 下载完成移除元素
  window.URL.revokeObjectURL(url) // 释放掉blob对象
}
// 检验对象是否有效，是否是null或者undefined
export const isValid = (v: any) =>
  v !== null &&
  v !== undefined &&
  !Number.isNaN(v) &&
  (typeof v !== 'number' || Number.isFinite(v))
// 将无效的对象转换成指定字符串返回
export const formatInvalidValue = (v: any, str = '-') => (isValid(v) ? v : str)
// 返回指定最大有效小数点位数数字
export const getMinDecimal = (value: number, num: number) =>
  Math.round(value * 10 ** num) / 10 ** num
// 清空reactive响应式表单
export const clearReactiveForm = (form: { [key: string]: any }) => {
  Object.keys(form).forEach(k => (form[k] = null))
}
//菜单递归方法
export function reCurrence(list: any[]) {
  const target: any[] = []
  list.forEach(item => {
    if (item.displayFlag) {
      if (item.children.length) {
        item.children = reCurrence(item.children)
      }
      target.push(item)
    }
  })
  return target
}
